package handler.channel;
//
//import constants.Aboutmaple;
//import java.sql.Connection;
//import java.sql.PreparedStatement;
//import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.util.LinkedList;
//import java.util.List;
//import client.items.Equip;
//import client.items.IItem;
//import client.items.ItemFlag;
//import constants.GameConstants;
//import client.items.Item;
//import client.maplePlayer;
//import client.maplePlayerUtil;
//import client.mapleAccount;
//import client.items.MapleInventoryType;
//import database.MYSQL;
//import packet.transfer.read.Readingmaple;
//import server.items.DueyActions;
//import server.items.InventoryManipulator;
//import server.items.ItemInformation;
//import packet.creators.MainPacketCreator;
//
public class DueyHandler {
//
//    /*
//     * 19 = Successful
//     * 18 = One-of-a-kind Item is already in Reciever's delivery
//     * 17 = The Character is unable to recieve the parcel
//     * 15 = Same account
//     * 14 = Name does not exist
//     */
//    public static void DueyOperation(Readingmaple rh, mapleAccount c) {
//	byte operation = rh.readByte();
//
//	switch (operation) {
//	    case 1: { // Start Duey, 13 digit AS
//		String AS13Digit = rh.readMapleAsciiString();
////		int unk = slea.readInt(); // Theres an int here, value = 1
//		//  9 = error
//		int conv = c.getPlayer().getConversation();
//
//		if (conv == 2) { // Duey
//		    c.getSession().write(MainPacketCreator.sendDuey((byte) 10, loadItems(c.getPlayer())));
//		}
//		break;
//	    }
//	    case 3: { // Send Item
//		if (c.getPlayer().getConversation() != 2) {
//		    return;
//		}
//		byte inventId = rh.readByte();
//		short itemPos = rh.readShort();
//		short amount = rh.readShort();
//		int mesos = rh.readInt();
//		String recipient = rh.readMapleAsciiString();
//		boolean quickdelivery = rh.readByte() > 0;
//
//		int finalcost = mesos + GameConstants.getTaxAmount(mesos) + (quickdelivery ? 0 : 5000);
//
//		if (mesos >= 0 && mesos <= 100000000 && c.getPlayer().getMeso() >= finalcost) {
//		    int accid = maplePlayerUtil.getIdByName(recipient);
//		    if (accid != -1) {
//			if (accid != c.getAccID()) {
//			    boolean recipientOn = false;
//			    /*			    MapleClient rClient = null;
//			    try {
//			    int channel = c.getChannelServer().getWorldInterface().find(recipient);
//			    if (channel > -1) {
//			    recipientOn = true;
//			    ChannelServer rcserv = ChannelServer.getInstance(channel);
//			    rClient = rcserv.getPlayerStorage().getCharacterByName(recipient).getClient();
//			    }
//			    } catch (RemoteException re) {
//			    c.getChannelServer().reconnectWorld();
//			    }*/
//
//			    if (inventId > 0) {
//				MapleInventoryType inv = MapleInventoryType.getByType(inventId);
//				IItem item = c.getPlayer().getInventory(inv).getItem((short) itemPos);
//				if (item == null) {
//				    c.getSession().write(MainPacketCreator.sendDuey((byte) 17, null)); // Unsuccessfull
//				    return;
//				}
//				short flag = item.getFlag();
//				if (ItemFlag.UNTRADEABLE.check(flag) || ItemFlag.LOCK.check(flag)) {
//				    c.getSession().write(MainPacketCreator.resetActions());
//				    return;
//				}
//				if (c.getPlayer().getItemQuantity(item.getItemId(), false) >= amount) {
//				    ItemInformation ii = ItemInformation.getInstance();
//				    if (!ii.isDropRestricted(item.getItemId())) {
//					if (addItemToDB(item, amount, mesos, c.getPlayer().getName(), accid, recipientOn)) {
//					    if (GameConstants.isThrowingStar(item.getItemId()) || GameConstants.isBullet(item.getItemId())) {
//						InventoryManipulator.removeFromSlot(c, inv, (byte) itemPos, item.getQuantity(), true);
//					    } else {
//						InventoryManipulator.removeFromSlot(c, inv, (byte) itemPos, amount, true, false);
//					    }
//					    c.getPlayer().gainMeso(-finalcost, false);
//
//					    c.getSession().write(MainPacketCreator.sendDuey((byte) 19, null)); // Successfull
//					} else {
//					    c.getSession().write(MainPacketCreator.sendDuey((byte) 17, null)); // Unsuccessful
//					}
//				    } else {
//					c.getSession().write(MainPacketCreator.sendDuey((byte) 17, null)); // Unsuccessfull
//				    }
//				} else {
//				    c.getSession().write(MainPacketCreator.sendDuey((byte) 17, null)); // Unsuccessfull
//				}
//			    } else {
//				if (addMesoToDB(mesos, c.getPlayer().getName(), accid, recipientOn)) {
//				    c.getPlayer().gainMeso(-finalcost, false);
//
//				    c.getSession().write(MainPacketCreator.sendDuey((byte) 19, null)); // Successfull
//				} else {
//				    c.getSession().write(MainPacketCreator.sendDuey((byte) 17, null)); // Unsuccessfull
//				}
//			    }
////                            if (recipientOn && rClient != null) {
//			    //                              rClient.getSession().write(MaplePacketCreator.sendDueyMSG(Actions.PACKAGE_MSG.getCode()));
//			    //                        }
//			} else {
//			    c.getSession().write(MainPacketCreator.sendDuey((byte) 15, null)); // Same acc error
//			}
//		    } else {
//			c.getSession().write(MainPacketCreator.sendDuey((byte) 14, null)); // Name does not exist
//		    }
//		} else {
//		    c.getSession().write(MainPacketCreator.sendDuey((byte) 12, null)); // Not enough mesos
//		}
//		break;
//	    }
//	    case 5: { // Recieve Package
//		if (c.getPlayer().getConversation() != 2) {
//		    return;
//		}
//		int packageid = rh.readInt();
//		DueyActions dp = loadSingleItem(packageid, c.getPlayer().getId());
//		if (dp == null) {
//		    return;
//		}
//		if (dp.getItem() != null && !InventoryManipulator.checkSpace(c, dp.getItem().getItemId(), dp.getItem().getQuantity(), dp.getItem().getOwner())) {
//		    c.getSession().write(MainPacketCreator.sendDuey((byte) 16, null)); // Not enough Space
//		    return;
//		} else if (dp.getMesos() < 0 || (dp.getMesos() + c.getPlayer().getMeso()) < 0) {
//		    c.getSession().write(MainPacketCreator.sendDuey((byte) 17, null)); // Unsuccessfull
//		    return;
//		}
//		removeItemFromDB(packageid, c.getPlayer().getId()); // Remove first
//		if (dp.getItem() != null) {
//		    InventoryManipulator.addFromDrop(c, dp.getItem(), false);
//		}
//		if (dp.getMesos() != 0) {
//		    c.getPlayer().gainMeso(dp.getMesos(), false);
//		}
//		c.getSession().write(MainPacketCreator.removeItemFromDuey(false, packageid));
//		break;
//	    }
//	    case 6: { // Remove package
//		if (c.getPlayer().getConversation() != 2) {
//		    return;
//		}
//		int packageid = rh.readInt();
//		removeItemFromDB(packageid, c.getPlayer().getId());
//		c.getSession().write(MainPacketCreator.removeItemFromDuey(true, packageid));
//		break;
//	    }
//	    case 8: { // Close Duey
//		c.getPlayer().setConversation(0);
//		break;
//	    }
//	    default: {
//		System.out.println("Unhandled Duey operation : " + rh.toString());
//		break;
//	    }
//	}
//    }
//
//    private static boolean addMesoToDB(int mesos, String sName, int recipientID, boolean isOn) {
//	Connection con = MYSQL.getConnection();
//	try {
//	    PreparedStatement ps = con.prepareStatement("INSERT INTO dueypackages (RecieverId, SenderName, Mesos, TimeStamp, Checked, Type) VALUES (?, ?, ?, ?, ?, ?)");
//	    ps.setInt(1, recipientID);
//	    ps.setString(2, sName);
//	    ps.setInt(3, mesos);
//	    ps.setLong(4, System.currentTimeMillis());
//	    ps.setInt(5, isOn ? 0 : 1);
//	    ps.setInt(6, 3);
//
//	    ps.executeUpdate();
//	    ps.close();
//
//	    return true;
//	} catch (SQLException se) {
//	    return false;
//	}
//    }
//
//    private static boolean addItemToDB(IItem item, int quantity, int mesos, String sName, int recipientID, boolean isOn) {
//	Connection con = MYSQL.getConnection();
//	try {
//	    PreparedStatement ps = con.prepareStatement("INSERT INTO dueypackages (RecieverId, SenderName, Mesos, TimeStamp, Checked, Type) VALUES (?, ?, ?, ?, ?, ?)", MYSQL.RETURN_GENERATED_KEYS);
//	    ps.setInt(1, recipientID);
//	    ps.setString(2, sName);
//	    ps.setInt(3, mesos);
//	    ps.setLong(4, System.currentTimeMillis());
//	    ps.setInt(5, isOn ? 0 : 1);
//
//	    ps.setInt(6, item.getType());
//	    ps.executeUpdate();
//
//	    ResultSet rs = ps.getGeneratedKeys();
//	    rs.next();
//	    PreparedStatement ps2;
//
//	    if (item.getType() == 1) { // equips
//		ps2 = con.prepareStatement("INSERT INTO dueyitems (PackageId, itemid, quantity, upgradeslots, level, str, dex, `int`, luk, hp, mp, watk, matk, wdef, mdef, acc, avoid, hands, speed, jump, owner, GM_Log, flag, expiredate, ViciousHammer, potential, potentialstats1, potentialstats2, potentialstats3, itemLevel, itemEXP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
//		Equip eq = (Equip) item;
//		ps2.setInt(1, rs.getInt(1));
//		ps2.setInt(2, eq.getItemId());
//		ps2.setInt(3, 1); // Quantity
//		ps2.setInt(4, eq.getUpgradeSlots());
//		ps2.setInt(5, eq.getLevel());
//		ps2.setInt(6, eq.getStr());
//		ps2.setInt(7, eq.getDex());
//		ps2.setInt(8, eq.getInt());
//		ps2.setInt(9, eq.getLuk());
//		ps2.setInt(10, eq.getHp());
//		ps2.setInt(11, eq.getMp());
//		ps2.setInt(12, eq.getWatk());
//		ps2.setInt(13, eq.getMatk());
//		ps2.setInt(14, eq.getWdef());
//		ps2.setInt(15, eq.getMdef());
//		ps2.setInt(16, eq.getAcc());
//		ps2.setInt(17, eq.getAvoid());
//		ps2.setInt(18, eq.getHands());
//		ps2.setInt(19, eq.getSpeed());
//		ps2.setInt(20, eq.getJump());
//		ps2.setString(21, eq.getOwner());
//		ps2.setString(22, eq.getGMLog());
//		ps2.setInt(23, eq.getFlag());
//		ps2.setLong(24, eq.getExpiration());
////		ps2.setInt(26, eq.getPotential());
////                ps2.setInt(27, eq.getPotentialStats1());
////                ps2.setInt(28, eq.getPotentialStats2());
////                ps2.setInt(29, eq.getPotentialStats3());
//		ps2.setInt(25, eq.getViciousHammer());
//		ps2.setInt(26, 0);
//                ps2.setInt(27, 0);
//                ps2.setInt(28, 0);
//                ps2.setInt(29, 0);
//		ps2.setInt(30, eq.getItemLevel());
//		ps2.setInt(31, eq.getItemEXP());
//	    } else {
//		ps2 = con.prepareStatement("INSERT INTO dueyitems (PackageId, itemid, quantity, owner, GM_Log, flag, expiredate) VALUES (?, ?, ?, ?, ?, ?, ?)");
//		ps2.setInt(1, rs.getInt(1));
//		ps2.setInt(2, item.getItemId());
//		ps2.setInt(3, quantity);
//		ps2.setString(4, item.getOwner());
//		ps2.setString(5, item.getGMLog());
//		ps2.setInt(6, item.getFlag());
//		ps2.setLong(7, item.getExpiration());
//	    }
//	    ps2.executeUpdate();
//	    ps2.close();
//	    rs.close();
//	    ps.close();
//
//	    return true;
//	} catch (SQLException se) {
//	    if (!Aboutmaple.realese) se.printStackTrace();
//	    return false;
//	}
//    }
//
//    public static List<DueyActions> loadItems(maplePlayer chr) {
//	List<DueyActions> packages = new LinkedList<DueyActions>();
//	Connection con = MYSQL.getConnection();
//	try {
//	    PreparedStatement ps = con.prepareStatement("SELECT * FROM dueypackages LEFT JOIN dueyitems USING (PackageId) WHERE RecieverId = ?");
//	    ps.setInt(1, chr.getId());
//	    ResultSet rs = ps.executeQuery();
//	    while (rs.next()) {
//		DueyActions dueypack = getItemByPID(rs);
//		dueypack.setSender(rs.getString("SenderName"));
//		dueypack.setMesos(rs.getInt("Mesos"));
//		dueypack.setSentTime(rs.getLong("TimeStamp"));
//		packages.add(dueypack);
//	    }
//	    rs.close();
//	    ps.close();
//	    return packages;
//	} catch (SQLException se) {
//	    if (!Aboutmaple.realese) se.printStackTrace();
//	    return null;
//	}
//    }
//
//    public static DueyActions loadSingleItem(int packageid, int charid) {
//	List<DueyActions> packages = new LinkedList<DueyActions>();
//	Connection con = MYSQL.getConnection();
//	try {
//	    PreparedStatement ps = con.prepareStatement("SELECT * FROM dueypackages LEFT JOIN dueyitems USING (PackageId) WHERE PackageId = ? and RecieverId = ?");
//	    ps.setInt(1, packageid);
//	    ps.setInt(2, charid);
//	    ResultSet rs = ps.executeQuery();
//
//	    if (rs.next()) {
//		DueyActions dueypack = getItemByPID(rs);
//		dueypack.setSender(rs.getString("SenderName"));
//		dueypack.setMesos(rs.getInt("Mesos"));
//		dueypack.setSentTime(rs.getLong("TimeStamp"));
//		packages.add(dueypack);
//		rs.close();
//		ps.close();
//		return dueypack;
//	    } else {
//		rs.close();
//		ps.close();
//		return null;
//	    }
//	} catch (SQLException se) {
////	    se.printStackTrace();
//	    return null;
//	}
//    }
//
//    public static void reciveMsg(mapleAccount c, int recipientId) {
//	Connection con = MYSQL.getConnection();
//	try {
//	    PreparedStatement ps = con.prepareStatement("UPDATE dueypackages SET Checked = 0 where RecieverId = ?");
//	    ps.setInt(1, recipientId);
//	    ps.executeUpdate();
//	    ps.close();
//	} catch (SQLException se) {
//	    if (!Aboutmaple.realese) se.printStackTrace();
//	}
//    }
//
//    private static void removeItemFromDB(int packageid, int charid) {
//	Connection con = MYSQL.getConnection();
//	try {
//	    PreparedStatement ps = con.prepareStatement("DELETE FROM dueypackages WHERE PackageId = ? and RecieverId = ?");
//	    ps.setInt(1, packageid);
//	    ps.setInt(2, charid);
//	    ps.executeUpdate();
//	    ps.close();
//	} catch (SQLException se) {
//	    if (!Aboutmaple.realese) se.printStackTrace();
//	}
//    }
//
//    private static DueyActions getItemByPID(ResultSet rs) {
//	try {
//	    DueyActions dueypack;
//	    if (rs.getInt("type") == 1) {
//		Equip eq = new Equip(rs.getInt("itemid"), (byte) 0, -1, (byte) 0);
//		eq.setUpgradeSlots(rs.getByte("upgradeslots"));
//		eq.setLevel(rs.getByte("level"));
//		eq.setStr(rs.getShort("str"));
//		eq.setDex(rs.getShort("dex"));
//		eq.setInt(rs.getShort("int"));
//		eq.setLuk(rs.getShort("luk"));
//		eq.setHp(rs.getShort("hp"));
//		eq.setMp(rs.getShort("mp"));
//		eq.setWatk(rs.getShort("watk"));
//		eq.setMatk(rs.getShort("matk"));
//		eq.setWdef(rs.getShort("wdef"));
//		eq.setMdef(rs.getShort("mdef"));
//		eq.setAcc(rs.getShort("acc"));
//		eq.setAvoid(rs.getShort("avoid"));
//		eq.setHands(rs.getShort("hands"));
//		eq.setSpeed(rs.getShort("speed"));
//		eq.setJump(rs.getShort("jump"));
//		eq.setOwner(rs.getString("owner"));
//		eq.setFlag(rs.getShort("flag"));
//		eq.setExpiration(rs.getLong("expiredate"));
//		eq.setViciousHammer(rs.getByte("ViciousHammer"));
////		eq.setPotential(rs.getInt("potential"));
////                eq.setPotentialStats1(rs.getShort("potentialstats1"));
////                eq.setPotentialStats2(rs.getShort("potentialstats2"));
////                eq.setPotentialStats3(rs.getShort("potentialstats3"));
//		eq.setItemLevel(rs.getByte("itemLevel"));
//		eq.setItemEXP(rs.getShort("itemEXP"));
//		eq.setGMLog(rs.getString("GM_Log"));
//		dueypack = new DueyActions(rs.getInt("PackageId"), eq);
//
//	    } else if (rs.getInt("type") == 2) {
//		Item newItem = new Item(rs.getInt("itemid"), (byte) 0, (short) rs.getInt("quantity"), (byte) 0);
//		newItem.setOwner(rs.getString("owner"));
//		newItem.setFlag(rs.getShort("flag"));
//		newItem.setExpiration(rs.getLong("expiredate"));
//		newItem.setGMLog(rs.getString("GM_Log"));
//		dueypack = new DueyActions(rs.getInt("PackageId"), newItem);
//	    } else {
//		dueypack = new DueyActions(rs.getInt("PackageId"));
//	    }
//	    return dueypack;
//	} catch (SQLException se) {
//	    if (!Aboutmaple.realese) se.printStackTrace();
//	    return null;
//	}
//    }
}